package Juego;

import javax.swing.JLabel;
import java.awt.Point;

import GUI.Grafica;
import Naves.NaveJugador;

/**
 * Estructura que controla las vidas y la parte grafica de los ataques especiales del jugador.
 * @author Gzain y Marziali.
 */
public class Inventario {
		
	//Atributos de instancia
	
	  protected Vida [] vidas;
	  protected int cantidad;
	  protected Grafica graph;
	  protected JLabel [] iconoEspecial;
	 
	  
   //Constructor de clase
	  
	  /**
	   * Constructor de la clase inventario
	   * @param grafica del juego
	   * @return -
	   */
	  public Inventario(Grafica grafica) {
		  
		 //Seteo de la Grafica  
		  graph = grafica;
		  
	    //Logica. Se puede tener hasta 5 vidas
		 vidas = new Vida[4];
		 cantidad = 0;
		 for (int i=0; i<3; i++) {
			 this.addVida();
			  }
		 
		 //Iconos especiales
		 iconoEspecial = new JLabel[4];
	    }
	  
  //Servicios
	  
	 /**
	  * Inicializa la parte grafica del ataque especial, que es una bomba o rayo depende la nave
	  * @param nave elegida por el jugador
	  * @return -
	  */
	 public void initGraficaEspecial(NaveJugador nave) {
		 
		  //El jugador empezo con dos bombas o dos rayos
		  JLabel esp1 = new JLabel();
		  esp1.setIcon(nave.getEspecialPNG());
		  esp1.setBounds(5,564 - nave.getEspecialPNG().getIconHeight(),nave.getEspecialPNG().getIconWidth(),nave.getEspecialPNG().getIconHeight());
		  JLabel esp2 = acomodarYCrear(esp1);
		 
		 iconoEspecial[0] = esp1;
		 iconoEspecial[1] = esp2;
		 
		 //Insercion en Parte grafica
		 graph.agregarComp(esp1);
		 graph.agregarComp(esp2);  
	    }
	 
	 /**
	  * Actualiza la parte grafica de los ataques especiales, quitando el icon correspondiente
	  * @param nave del jugador.
	  * @return -
	  */
	 public void sacarIcono(NaveJugador nave) {
		 
		 int cantidad = nave.cantidadEspeciales();
		 
		 if (cantidad > 0) { 
			 			 
		   JLabel label = iconoEspecial[cantidad-1];
		   iconoEspecial[cantidad-1] = null;
		   //Se elimina de la parte grafica
		   graph.removerComp(label);
		     }
	     }
	 
	 /**
	  * Actualiza la parte grafica de los ataques especiales, agregando un icono en pantalla
	  * @param nave del jugador.
	  * @return -
	  */
	 public void agregarIcono (NaveJugador nave) {
		 
         JLabel esp = null;
         int valor = nave.cantidadEspeciales() -1;
                  
		 if (valor == 0) {
			 esp = new JLabel();
		    esp.setIcon(nave.getEspecialPNG());
		    esp.setBounds(5,564 - nave.getEspecialPNG().getIconHeight(),nave.getEspecialPNG().getIconWidth(),nave.getEspecialPNG().getIconHeight());
		    }
		 else  { //Se que al menos hay uno
			      JLabel label = iconoEspecial[valor-1];
		         esp = acomodarYCrear(label);
		         }
		 //Insercion en estructura
		 iconoEspecial[valor] = esp;
		
	    //Insercion en grafica
		 graph.agregarComp(esp);
	    }
	 
	 /**
	  * Acomoda las labels correspondiente a la parte grafica de los ataques especiales, en el frame.
	  * @param Label1 etiqueta, correspondiente al ataque especial al lado, del que se va a crear en pantalla.
	  * @return La etiqueta creada con su imagen y posicion correspondiente.
	  */ 
	 public JLabel acomodarYCrear(JLabel label1) {
		 
		 Point p = label1.getLocation();
		 JLabel salida = new JLabel();
		 int val1 = label1.getIcon().getIconWidth();
		 int val2 = label1.getIcon().getIconHeight();
		 salida.setIcon(label1.getIcon());
		 salida.setBounds(p.x + label1.getIcon().getIconWidth() +5, p.y, val1, val2);
		 return salida;
	    }
	  
	 /**
	  * Quita una vida al jugador. Actualiza parte logica y grafica.
	  */
	 public void quitarVida() {
		 
		 if (cantidad >= 1) {
		   //Pierdo vida
		   cantidad--;
		   Vida v = vidas[cantidad];
		   vidas[cantidad] = null;
		   //Actualizacion grafica
		   graph.removerComp(v); 
		    }
		 
	    }
	 
	 /**
	  * Agrega una vida al jugador. Actualiza parte grafica y logica.
	  */
	 public void addVida() {
		 
		//Se pueden acumular hasta 4 vidas
		if (cantidad < vidas.length) {
		  vidas[cantidad] = new Vida();
		  cantidad++;
		
		//Parte Grafica
		if (cantidad > 1) {
		   Vida vid = vidas[cantidad-2];
		   int valor = vid.getLocation().x;
		   vidas[cantidad-1].acomodar(valor);
		   }
		
		graph.agregarComp(vidas[cantidad-1]);
		   }
	    }
	 
	 /**
	  * Devuelve la cantidad de vidas del jugador.
	  * @return Cantidad de vidas del jugador.
	  */
	 public int getVida() {
		 
		return cantidad;
	    }
	 

}
